const fs = require('fs/promises');
const path = require('path');

// 日志函数
function log(msg) {
    const time = new Date().toISOString();
    console.log(`[${time}] ${msg}`);
}

// 确保目录存在
async function ensureDirExists(dirPath) {
    try {
        await fs.access(dirPath);
    } catch {
        await fs.mkdir(dirPath, { recursive: true });
        log(`已创建目录：${dirPath}`);
    }
}

/**
 * 复制源目录到目标目录
 * @param src 源目录路径
 * @param dest 目标目录路径
 */
async function syncDirectories(src, dest) {
    try {
        // 检查源目录是否存在
        await fs.access(src);
        log(`开始处理源目录：${src}`);

        const items = await fs.readdir(src, { withFileTypes: true });

        await ensureDirExists(dest);

        for (const item of items) {
            const srcPath = path.join(src, item.name);
            const destPath = path.join(dest, item.name);

            if (item.isDirectory()) {
                await syncDirectories(srcPath, destPath);
            } else {
                await fs.copyFile(srcPath, destPath);
                log(`已复制文件：${srcPath} -> ${destPath}`);
            }
        }
        log(`完成处理源目录：${src}`);
    } catch (err) {
        console.error(`处理失败：${src} -> ${dest}`, err.message);
    }
}

/**
 * 同步多个目录对
 * @param dirPairs 数组，每个元素是一个对象，包含 src 和 dest 属性
 */
async function syncMultipleDirs(dirPairs) {
    for (const pair of dirPairs) {
        await syncDirectories(pair.src, pair.dest);
    }
}

// 主函数
async function main() {
    log('开始同步文件...');

    // 定义需要同步的目录对
    const directoriesToSync = [
        {
            src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Bussiness\\js\\pg\\EmergencyManagement',
            dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Bussiness\\js\\pg\\EmergencyManagement'
        },
        // 添加更多需要同步的目录对
        {
            src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Views\\EmergencyManagement',
            dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Views\\EmergencyManagement'
        },
        {
            src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Bussiness\\js\\pg\\AccidentManagement',
            dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Bussiness\\js\\pg\\AccidentManagement'
        },
        // 添加更多需要同步的目录对
        {
            src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Views\\AccidentManagement',
            dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Views\\AccidentManagement'
        },
     {
            src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Bussiness\\js\\pg\\PPA',
            dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Bussiness\\js\\pg\\PPA'
        },
        // 添加更多需要同步的目录对
        {
            src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Views\\PPA',
            dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Views\\PPA'
        },
     {
            src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Bussiness\\js\\pg\\SpecialEquipment',
            dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Bussiness\\js\\pg\\SpecialEquipment'
        },
        // 添加更多需要同步的目录对
        {
            src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Views\\SpecialEquipment',
            dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Views\\SpecialEquipment'
        }
    ];

    // 执行同步
    await syncMultipleDirs(directoriesToSync);

    log('所有同步任务完成。');
}

main().catch(err => console.error('主程序错误:', err));
// [
//     {
//         src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Bussiness\\js\\pg\\EmergencyManagement',
//         dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Bussiness\\js\\pg\\EmergencyManagement'
//     },
//     // 添加更多需要同步的目录对
//     {
//         src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Views\\EmergencyManagement',
//         dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Views\\EmergencyManagement'
//     },
//     {
//         src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Bussiness\\js\\pg\\AccidentManagement',
//         dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Bussiness\\js\\pg\\AccidentManagement'
//     },
//     // 添加更多需要同步的目录对
//     {
//         src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Views\\AccidentManagement',
//         dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Views\\AccidentManagement'
//     },
//  {
//         src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Bussiness\\js\\pg\\PPA',
//         dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Bussiness\\js\\pg\\PPA'
//     },
//     // 添加更多需要同步的目录对
//     {
//         src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Views\\PPA',
//         dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Views\\PPA'
//     },
//  {
//         src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Bussiness\\js\\pg\\SpecialEquipment',
//         dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Bussiness\\js\\pg\\SpecialEquipment'
//     },
//     // 添加更多需要同步的目录对
//     {
//         src: 'C:\\Users\\pc\\Desktop\\SFPro\\Safety.Update\\SAE_INTRA\\Views\\SpecialEquipment',
//         dest: '\\\\192.168.0.110\\www\\SAE_INTRA\\Views\\SpecialEquipment'
//     }
// ]